/**
 * 部门数据结构，这里包含增删查改功能。
 */
var mongodb = require("./db.ts");
var ObjectID = require("mongodb").ObjectID;

const departmentName = "SysRbac_Departments";

function Departments(depart) {
  this.departName = depart.departName; //部门名称
  this.departId = depart.departId; //部门编号
  this.departParentId = depart.departParentId; //上级部门id
  this.departCreateTime = depart.departCreateTime; //创建时间，时间戳
  this.departCreateBy = depart.departCreateBy;//创建人，{id,name}
  this.departUpdateTime = depart.departUpdateTime;//更新时间，时间戳
  this.departUpdateBy = depart.departUpdateBy;//更新人，{id,name}
  this.departRoleId = depart.departRoleId;//部门权限 {};
}

//存储部门信息
Departments.prototype.save = function (dataBaseName,callback) {
  var depart = {
    departName: this.departName, //部门名称
    departId:this.departId, //上级部门id
    departParentId:this.departParentId, //上级部门id
    departCreateTime:this.departCreateTime, //创建时间，时间戳
    departCreateBy:this.departCreateBy,//创建人，{id,name}
    departUpdateTime:this.departUpdateTime,//更新时间，时间戳
    departUpdateBy:this.departUpdateBy,//更新人，{id,name}
    departRoleId:this.departRoleId,//部门权限 {};
  };
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
      //错误，返回 err 信息
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(departmentName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      collection.insert(depart, { safe: true }, function (err, user) {
        if (err) {
          return callback(err);
          //错误，返回 err 信息
        }
        callback(null, user.ops[0]);
        //成功！err 为 null，并返回存储后的用户文档
      });
    });
  });
};

//获取全部部门信息。
Departments.getAllDeparts = function (dataBaseName,callback) {
  //打开数据库
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(departmentName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = {};
      //根据 query 对象查询文章
      collection
        .find(query)
        .sort({ time: -1 })
        .toArray(function (err, objects) {
          if (err) {
            return callback(err); //失败！返回 err
          }
          callback(null, objects); //成功！以数组形式返回查询的结果
        });
    });
  });
};


Departments.findDepartById = function (id,dataBaseName, callback) {
  //读取 users 集合
  mongodb.connect((error) => {
    if (error) {
      return callback(error);
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(departmentName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = { _id: "" };
      if (id) {
        query._id = ObjectID(id);
      }
      //根据 query 对象查询文章
      collection.findOne(query, function (err, ob) {
        if (err) {
          return callback(err); //失败！返回 err
        }
        callback(null, ob); //成功！以数组形式返回查询的结果
      });
    });
  });
};

Departments.update = function (id, object,dataBaseName, callback) {
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
      //错误，返回 err 信息
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(departmentName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      //生成一个实体配置信息
      collection.updateOne(
        { _id: ObjectID(id) },
        { $set: object },
        function (err) {
          if (err) {
            return callback(err);
          }
          callback(null, { ...object, _id: id });
        }
      );
    });
  });
};

Departments.deleteById = function (id,dataBaseName, callback) {
  //打开数据库
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(departmentName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = { _id: "" };
      if (id) {
        query._id = ObjectID(id);
      }
      //根据 query 对象查询文章
      collection.deleteOne(query);
      callback(null); //删除成功
    });
  });
};

module.exports = Departments;
